package com.xbongbong.saas.domain.dao;

import com.xbongbong.saas.domain.entity.SupplierProductEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * SupplierProductDao
 *
 * @author GuoJun.HU
 * @since V1.0
 * @date 2019/2/19 11:06
 */
@Repository
@Mapper
public interface SupplierProductDao {

    /**
     * 新增一条供应商产品
     * @param supplierProduct 新增实体
     * @return id
     */
    Integer insert(SupplierProductEntity supplierProduct);

    /**
     * 批量新增供应商产品
     *
     * @param list 数据
     * @author GuoJun.HU
     * @since V1.0
     * @return Integer
     * @date 2019/6/10 14:42
     */
    Integer batchInsert(@Param("list") List<SupplierProductEntity> list);

    /**
     * 更新一条供应商产品
     * @param supplierProduct 新增实体
     * @return id
     */
    Integer update(SupplierProductEntity supplierProduct);

    /**
     * 批量更新一条供应商产品
     * @param list 数据
     * @param corpid 公司id
     * @return Integer
     */
    Integer updateBatch(@Param("list") List<SupplierProductEntity> list, @Param("corpid") String corpid);

    /**
     * 根据ID删除一条供应商产品
     * @param key 主键索引
     * @param corpid 公司ID
     * @return id
     */
    Integer deleteByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 根据ID批量删除供应商产品
     *
     * @param keys      主键索引
     * @param corpid    公司ID
     * @return Integer
     */
    Integer deleteByKeys(@Param("keys") List<Long> keys, @Param("corpid") String corpid);

    /**
     *  根据ID获取一条供应商产品信息
     * @param key 主键索引
     * @param corpid 公司ID
     * @return id
     */
    SupplierProductEntity getByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     *  根据参数查询符合条件的供应商产品实体
     * @param param 参数
     * @return 查询供应商产品信息实体集合
     */
    List<SupplierProductEntity> findEntitys(@Param("param") Map<String, Object> param);

    /**
     * 获取符合条件的数据数量
     * @param param 参数
     * @return 符合条件数据数
     */
    Integer getEntitysCount(@Param("param") Map<String, Object> param);

    /**
     * 更具供应商与公司ID删除数据
     * @param supplierId 供应商ID
     * @param corpid 公司ID
     * @return id
     */
    Integer deleteBySupplierId(@Param("supplierId") Long supplierId, @Param("corpid") String corpid);

    /**
     * 删除指定公司下的指定的供应商产品
     * @param productId 产品ID
     * @param corpid 公司ID
     * @return id
     */
    Integer deleteByProductId(@Param("productId") Long productId, @Param("corpid") String corpid);

    /**
     * 批量删除指定公司与供应商下的供应商产品
     * @param corpid 公司ID
     * @param supplierIdIn 供应商ID集合
     * @return 状态
     */
    Integer deleteBySupplierIdIn(@Param("corpid") String corpid, @Param("supplierIdIn") List<Long> supplierIdIn);

    Integer deleteByParentIdAndSupplierIdIn(@Param("parentId")Long parentId, @Param("supplierIdIn") List<Long> supplierIdIn, @Param("corpid")String corpid);

    Integer deleteBySupplierIdAndParentIdIn(@Param("supplierId")Long supplierId, @Param("parentIdIn")List<Long> parentIdIn,  @Param("corpid")String corpid);

    List<SupplierProductEntity> findCommonSupplier(@Param("corpid") String corpid, @Param("productIdIn") List<Long> productIds);

    Integer dataConsistencyUpdate(@Param("corpid")String corpid, @Param("corpid")Long dataId,@Param("name") String name);

    Long isProductSubAttrExist(@Param("attr") String attr, @Param("corpid") String corpid,@Param("isArray") Integer isArray);

    Double summaryByAttr(@Param("field") String field, @Param("corpid") String corpid,@Param("refId")  Long refId,@Param("productIdIn")  List<Long> productIdIn);

    Integer delBySupplierIdAndId(@Param("supplierId") Long supplierId, @Param("productSubId") Long productSubId, @Param("corpid") String corpid);

    Integer deleteByProductIdIn(@Param("productIdIn") List<Long> productIdIn, @Param("corpid") String corpid);

    Long countProductSub(@Param("attr") String attr, @Param("corpid") String corpid, @Param("isArray") Integer isArray);

    List<SupplierProductEntity> getProductWithSubData(@Param("attr") String attr, @Param("corpid") String corpid, @Param("isArray") Integer isArray, @Param("idGte") Long idGte, @Param("limit") Integer limit);
}
